#include "app.h"
#include "board.h"
#include "components\bstc\bstc.h"
#include "polsys.h"


// 静态定义 2 个 BSTC 对象 （分别控制2个升压电路）

static bstc mPrvBst;	
static bstc mMainBst;

static bool mOut = false;


// 函数申明

static void PrvBst_Event(boostc_event_t e);
static void MainBst_Event(boostc_event_t e);


// 启动事件，程序启动时执行一次
void App_Load()
{
	bstc_init_param bip;

	Board_Init();

	// 初始化 mPrvBst

	bip.EventCallBack = PrvBst_Event;
	bip.InitAdc = Board_PrvBstInitAdc;
	bip.InitPwm = Board_PrvBstInitPwm;
	bip.kp = _APP_PRV_BST_KP;
	bip.ki = _APP_PRV_BST_KI;
	bip.kd = _APP_PRV_BST_KD;
	bip.MaxPwmValue = _APP_PRV_BST_MAX_PWM_VALUE;
	bip.OcAllowCount = _APP_PRV_BST_OC_ALLOW_COUNT;
	bip.RunAdc = Board_PrvBstRunAdc;
	bip.SetPwm = Board_PrvBstSetPwm;
	bip.StopAdc = Board_PrvBstStopAdc;
	bip.TargetADV = Board_PrvBstGetAdv(6000);
	BSTC_init(&mPrvBst, &bip);

	// 初始化 mMainBst

	bip.EventCallBack = MainBst_Event;
	bip.InitAdc = Board_MainBstInitAdc;
	bip.InitPwm = Board_MainBstInitPwm;
	bip.kp = _APP_MAIN_BST_KP;
	bip.ki = _APP_MAIN_BST_KI;
	bip.kd = _APP_MAIN_BST_KD;
	bip.MaxPwmValue = _APP_MAIN_BST_MAX_PWM_VALUE;
	bip.OcAllowCount = _APP_MAIN_BST_OC_ALLOW_COUNT;
	bip.RunAdc = Board_MainBstRunAdc;
	bip.SetPwm = Board_MainBstSetPwm;
	bip.StopAdc = Board_MainBstStopAdc;
	bip.TargetADV = Board_MainBstGetAdv(10000);
	BSTC_init(&mMainBst, &bip);

	// 初始化 BTN 组件
	Btn_Init();
}

// BSP事件：PrvBst 的ADC采样完毕，通知采集结果
void Board_EventPrvBstAdcDone(u16 r)
{
	BSTC_evNewFBV(&mPrvBst, r);
}

// BSP事件：MainBst 的ADC采样完毕，通知采集结果
void Board_EventMainBstAdcDone(u16 r)
{
	BSTC_evNewFBV(&mMainBst, r);
}

// 按钮事件
void Btn_Event(btn_ev_t e)
{
	switch(e)
	{
	case BTN_EV_DOWN:
		if(mOut == false)
		{
			BSTC_start(&mPrvBst, 1);
			BSTC_start(&mMainBst, 1);
			mOut = true;
		}
		else
		{
			BSTC_stop(&mPrvBst);
			BSTC_stop(&mMainBst);
			mOut = false;
		}
		break;
	case BTN_EV_UP:
		break;
	default: break;
	}
}

// PrvBst 事件
static void PrvBst_Event(boostc_event_t e)
{
	switch(e)
	{
	case BSTC_EV_SHORT_OUT:
		break;
	default: break;
	}
}

// MainBst 事件
static void MainBst_Event(boostc_event_t e)
{
	switch(e)
	{
	case BSTC_EV_SHORT_OUT:
		break;
	default: break;
	}
}

